package com.itheima.health.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.health.dao.SetMealMapper;
import com.itheima.health.entity.PageResult;
import com.itheima.health.entity.QueryPageBean;
import com.itheima.health.pojo.Setmeal;
import com.itheima.health.service.SetmealService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.io.PipedReader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 2024/7/8-10:50
 * 功能:
 */
@Service
@Slf4j
public class SetmealServiceImpl implements SetmealService {

    @Resource
    private SetMealMapper setMealMapper;

    @Override
    public Setmeal findFullSetmealById(Integer id) {
        // 1.调用DAO获取一条套餐信息，包含所有的检查组和检查项
        Setmeal setmeal = setMealMapper.findFullSetmealById(id);
        // 2.返回一条套餐信息，包含所有的检查组和检查项
        return setmeal;
//        return null;
    }

    @Override
    public List<Setmeal> findAll() {
        // 1.调用DAO获取所有套餐信息
        List<Setmeal> list = setMealMapper.findAll();
        // 2.返回获取所有套餐信息
        return list;
    }

    @Override
    public void edit(Setmeal setmeal, Integer[] checkgroupIds) {
        setMealMapper.edit(setmeal);

        // 2.调用DAO 根据套餐id删除中间表数据（清理原有关联关系）
        setMealMapper.deleteAssociation(setmeal.getId());

        // 3.调用DAO 在中间表中添加检查组中包含的检查项
        setSetmealAndCheckgroup(setmeal.getId(), checkgroupIds);
    }

    private void setSetmealAndCheckgroup(Integer id, Integer[] checkgroupIds) {
        if (checkgroupIds != null && checkgroupIds.length > 0) {
            for (Integer checkgroupId : checkgroupIds) {
                Map<String, Integer> map = new HashMap<>();
                map.put("setmeal_id", id);
                map.put("checkgroup_id", checkgroupId);
                setMealMapper.setSetmealAndCheckgroup(map);
            }
        }
    }

    @Override
    public Setmeal findById(Integer id) {
        // 1.调用DAO获取一条套餐信息，只包含套餐信息
        Setmeal setmeal = setMealMapper.findById(id);

        // 2.返回一条套餐信息，findById
        return setmeal;
    }

    @Override
    public List<Integer> findCheckGroupIdsBySetmealId(String setmealId) {
        // 1.调用DAO根据套餐id查询对应的所有检查组id
        List<Integer> checkGroupIds = setMealMapper.findCheckGroupIdsBySetmealId(setmealId);

        // 2.返回套餐id对应的所有检查组id
        return checkGroupIds;
    }

    @Override
    public void add(Setmeal setmeal, Integer[] checkgroupIds) {
        // 1.调用DAO新增套餐
        setMealMapper.add(setmeal);

        // 2.调用DAO在中间表中添加套餐和检查组
        setSetmealAndCheckGroup(setmeal.getId(), checkgroupIds);
    }

    private void setSetmealAndCheckGroup(Integer setmealId, Integer[] checkgroupIds) {
        if (checkgroupIds != null && checkgroupIds.length > 0) {
            for (Integer checkgroupId : checkgroupIds) {
                Map<String, Integer> map = new HashMap<>();
                map.put("setmeal_id", setmealId);
                map.put("checkgroup_id", checkgroupId);
                // 把套餐和对应的检查组保存到中间表
                setMealMapper.setSetmealAndCheckGroup(map);
            }
        }
    }

    @Override
    public PageResult findPage(QueryPageBean queryPageBean) {
        // 1.使用分页插件开始分页
        PageHelper.startPage(queryPageBean.getCurrentPage(), queryPageBean.getPageSize());
        // 2.调用DAO分页查询
        Page<Setmeal> page = setMealMapper.findPage(queryPageBean.getQueryString());
        return new PageResult(page.getTotal(), page.getResult());
    }
}
